package cn.gzsxt.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;

import cn.gzsxt.mapper.provider.AdminProvider;

/**
 * 使用Mybatis传递参数，建议统一使用Object类型，因为Mybatis框架会自动转成传递的类型 
 * @author ranger
 *
 */
@Mapper
public interface AdminMapper {
	

	/**
	 * 通过条件返回总记录数
	 * 
	 * @param condition
	 * @return
	 */
	@SelectProvider(type = AdminProvider.class, method = "count")
	long count(Map<String, Object> condition);
	
	/**
	 * 通过编号删除记录
	 * @param adminIds
	 * @return
	 */
	@DeleteProvider(type=AdminProvider.class,method="deleteByIds")
	int deleteByIds(Object... adminIds);
	
	/**
	 * 查询所有管理员数据
	 * 
	 * @return
	 */
	@Select("SELECT * FROM tb_basic_admin")
	List<Map<String, Object>> findAll();
	

	
	/**
	 * 通过账号名查询管理员记录
	 * @param adminAccount 参数：账号名
	 * @return 返回管理员记录
	 */
	@Select("SELECT *	FROM tb_basic_admin WHERE ADMIN_ACCOUNT=#{adminAccount}")
	Map<String, Object> findByAccount(Object adminAccount);

	/**
	 * 通过条件分页查询
	 * 
	 * @param condition
	 * @param start
	 *            = index * size （数据库索引从0开始）
	 * @param size
	 * @return
	 */
	@SelectProvider(type = AdminProvider.class, method = "findByConditionAndPage")
	List<Map<String, Object>> findByConditionAndPage(@Param("condition") Map<String, Object> condition,
			@Param("start") int start, @Param("size") int size);

	/**
	 * 通过管理员编号查询一条记录
	 * @param adminId
	 * @return
	 */
	@Select("SELECT *	FROM tb_basic_admin WHERE ADMIN_ID=#{adminId}")
	Map<String,Object> findById(Object adminId);

	/**
	 * 插入管理员记录
	 * @param admin
	 * @return
	 */
	@Insert("INSERT INTO tb_basic_admin	(ADMIN_NAME, ADMIN_ACCOUNT, ADMIN_PWD, ADMIN_STATUS, ADMIN_CREATE_DATE, ROLE_ID)	VALUES (#{ADMIN_NAME}, #{ADMIN_ACCOUNT}, #{ADMIN_PWD}, #{ADMIN_STATUS}, #{ADMIN_CREATE_DATE}, #{ROLE_ID})")
	@Options(keyProperty="ADMIN_ID",keyColumn="ADMIN_ID",useGeneratedKeys=true)
	int insert(Map<String, Object> admin);
	

	
	/**
	 * 更新非空的字段
	 * @param admin
	 * @return
	 */
	@UpdateProvider(type=AdminProvider.class,method="updateForNotnull")
	int updateForNotnull(Map<String, Object> admin);

}
